// @flow
// 需要添加注释标记
function sum (a: number, b: number) {
    return a + b
}

console.log(sum(100, 200))



// 数据类型
const a: number = 1

const b: string = '1111'

const c: boolean = true


// 数组类型表示
const array: Array<number> = [1, 3, 5]

const array1: number[] = [2,5,7]


// 对象类型限制

const obj1: { foo: string, bar: number } = {foo: '222', bar: 1} // 设置值的类型
const obj2: { foo?: string, bar: number } = {bar: 2} // ？可有可无

const obj3: { [string]: string } = {'value': 'value'} // 设置key和value的类型



// 特殊类型
const d: 'foo' = 'foo'

const type: 'success' | 'warning' | 'danger' = 'success'

type stringOrNumber = string | number // 设置一个类型

const e: stringOrNumber = 100 // 'value' // 



// mixed any 

// 都可以表示所有类型，但是mixed和any的区别在于 ： miexd是强类型，any是弱类型，多用于兼容之前的老代码。mixed方法需要判断类型
function passMixed(value: mixed) {
    if(typeof value === 'string') {
        value.substr(2)
    } 
    
    if(typeof value === 'number') {
        value * value
    }
    
}

function passAny(value: any) {
    value.substr(1)
}